using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._AviationTools._Airports._Analysis
{
    /// <summary>
    /// <para>Analyze LAS Runway Obstacles</para>
    /// <para>Analyzes lidar data and obstruction identification surfaces (OIS) to determine if lidar points are penetrating.</para>
    /// <para>分析激光雷达数据和障碍物识别表面 （OIS），以确定激光雷达点是否具有穿透力。</para>
    /// </summary>    
    [DisplayName("Analyze LAS Runway Obstacles")]
    public class AnalyzeLASRunwayObstacles : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AnalyzeLASRunwayObstacles()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_ois_features">
        /// <para>Input OIS Features</para>
        /// <para>The input multipatch features representing one or more OIS. The feature class must be z-enabled.</para>
        /// <para>表示一个或多个 OIS 的输入多面体要素。要素类必须启用 z 功能。</para>
        /// </param>
        /// <param name="_in_las_obstacles">
        /// <para>Input LAS Obstacles</para>
        /// <para>The input LAS dataset that contains 3D data points covering the area around an airport. The points represent a 3D view of natural and man-made objects that could pose a hazard to flight.</para>
        /// <para>输入 LAS 数据集，其中包含覆盖机场周围区域的 3D 数据点。这些点代表了可能对飞行构成危险的自然和人造物体的 3D 视图。</para>
        /// </param>
        public AnalyzeLASRunwayObstacles(object _in_ois_features, object _in_las_obstacles)
        {
            this._in_ois_features = _in_ois_features;
            this._in_las_obstacles = _in_las_obstacles;
        }
        public override string ToolboxName => "Aviation Tools";

        public override string ToolName => "Analyze LAS Runway Obstacles";

        public override string CallName => "aviation.AnalyzeLASRunwayObstacles";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_ois_features, _in_las_obstacles, _out_obstacle_feature_class, _target_folder, _out_las_obstacles, _vertical_clearance, _vertical_clearance_unit.GetGPValue()];

        /// <summary>
        /// <para>Input OIS Features</para>
        /// <para>The input multipatch features representing one or more OIS. The feature class must be z-enabled.</para>
        /// <para>表示一个或多个 OIS 的输入多面体要素。要素类必须启用 z 功能。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input OIS Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_ois_features { get; set; }


        /// <summary>
        /// <para>Input LAS Obstacles</para>
        /// <para>The input LAS dataset that contains 3D data points covering the area around an airport. The points represent a 3D view of natural and man-made objects that could pose a hazard to flight.</para>
        /// <para>输入 LAS 数据集，其中包含覆盖机场周围区域的 3D 数据点。这些点代表了可能对飞行构成危险的自然和人造物体的 3D 视图。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input LAS Obstacles")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_las_obstacles { get; set; }


        /// <summary>
        /// <para>Output Obstacle Feature Class</para>
        /// <para>The output point features that represent lidar points in OIS features in which the height of the lidar point is greater than the height of the enclosing OIS feature at that point. This feature class is required output only if no output LAS dataset is requested.</para>
        /// <para>在 OIS 要素中表示激光雷达点的输出点要素，其中激光雷达点的高度大于该点的封闭 OIS 要素的高度。仅当未请求输出 LAS 数据集时，此要素类才是必需的输出。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Obstacle Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_obstacle_feature_class { get; set; } = null;


        /// <summary>
        /// <para>Target Folder</para>
        /// <para>The folder to which LAS files will be written. Each output file will have the same LAS file version and point record format as the input file. This folder is required output only if no output feature class is requested.</para>
        /// <para>将 LAS 文件写入的文件夹。每个输出文件将具有与输入文件相同的 LAS 文件版本和点记录格式。仅当未请求输出要素类时，此文件夹才是必需的输出。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Folder")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _target_folder { get; set; } = null;


        /// <summary>
        /// <para>Output LAS Obstacles</para>
        /// <para>The output LAS dataset referencing the newly created LAS files. This LAS Dataset is created only when the output folder is specified to generate the LAS output.</para>
        /// <para>引用新创建的 LAS 文件的输出 LAS 数据集。仅当指定输出文件夹以生成 LAS 输出时，才会创建此 LAS 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output LAS Obstacles")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_las_obstacles { get; set; } = null;


        /// <summary>
        /// <para>Vertical Clearance</para>
        /// <para>If a LAS point height is above the OIS surface, that point will be captured. The height of an OIS surface above a given LAS point is temporarily lowered by the specified vertical clearance value. This serves to decrease the distance between the height of the LAS point and the corresponding OIS surface, resulting in the likeliness that more points will be captured. Thus, you can be sure that a more liberal collection of ground features, represented by the LAS points penetrating through the OIS surface, will be captured.</para>
        /// <para>如果 LAS 点高度高于 OIS 表面，则将捕获该点。给定 LAS 点上方的 OIS 曲面高度将暂时降低指定的垂直间隙值。这有助于减小 LAS 点的高度与相应的 OIS 表面之间的距离，从而有可能捕获更多点。因此，您可以确定将捕获更自由的地面要素集合，以穿透 OIS 表面的 LAS 点表示。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Vertical Clearance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _vertical_clearance { get; set; } = 0;


        /// <summary>
        /// <para>Vertical Clearance Unit</para>
        /// <para><xdoc>
        ///   <para>The linear unit of the vertical clearance.</para>
        ///   <bulletList>
        ///     <bullet_item>Kilometers—The linear unit is kilometers.</bullet_item><para/>
        ///     <bullet_item>Meters—The linear unit is meters.</bullet_item><para/>
        ///     <bullet_item>Decimeters—The linear unit is decimeters.</bullet_item><para/>
        ///     <bullet_item>Centimeters—The linear unit is centimeters.</bullet_item><para/>
        ///     <bullet_item>Millimeters—The linear unit is millimeters.</bullet_item><para/>
        ///     <bullet_item>Nautical miles—The linear unit is nautical miles.</bullet_item><para/>
        ///     <bullet_item>Miles—The linear unit is miles.</bullet_item><para/>
        ///     <bullet_item>Yards—The linear unit is yards.</bullet_item><para/>
        ///     <bullet_item>Feet—The linear unit is feet.</bullet_item><para/>
        ///     <bullet_item>Inches—The linear unit is inches.</bullet_item><para/>
        ///     <bullet_item>Decimal degrees—The linear unit is decimal degrees.</bullet_item><para/>
        ///     <bullet_item>Points—The linear unit is points.</bullet_item><para/>
        ///     <bullet_item>Unknown—The linear unit is unknown.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>垂直间隙的线性单位。</para>
        ///   <bulletList>
        ///     <bullet_item>千米—线性单位为千米。</bullet_item><para/>
        ///     <bullet_item>米 - 线性单位为米。</bullet_item><para/>
        ///     <bullet_item>分米 - 线性单位为分米。</bullet_item><para/>
        ///     <bullet_item>厘米—线性单位为厘米。</bullet_item><para/>
        ///     <bullet_item>毫米 - 线性单位为毫米。</bullet_item><para/>
        ///     <bullet_item>海里 - 线性单位为海里。</bullet_item><para/>
        ///     <bullet_item>英里—线性单位为英里。</bullet_item><para/>
        ///     <bullet_item>码 - 线性单位为码。</bullet_item><para/>
        ///     <bullet_item>英尺 - 线性单位为英尺。</bullet_item><para/>
        ///     <bullet_item>英寸—线性单位为英寸。</bullet_item><para/>
        ///     <bullet_item>十进制度 - 线性单位为十进制度。</bullet_item><para/>
        ///     <bullet_item>点数 （Points） - 线性单位为点。</bullet_item><para/>
        ///     <bullet_item>未知 - 线性单位未知。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Vertical Clearance Unit")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _vertical_clearance_unit_value _vertical_clearance_unit { get; set; } = _vertical_clearance_unit_value._METERS;

        public enum _vertical_clearance_unit_value
        {
            /// <summary>
            /// <para>Kilometers</para>
            /// <para>Kilometers—The linear unit is kilometers.</para>
            /// <para>千米—线性单位为千米。</para>
            /// </summary>
            [Description("Kilometers")]
            [GPEnumValue("KILOMETERS")]
            _KILOMETERS,

            /// <summary>
            /// <para>Meters</para>
            /// <para>Meters—The linear unit is meters.</para>
            /// <para>米 - 线性单位为米。</para>
            /// </summary>
            [Description("Meters")]
            [GPEnumValue("METERS")]
            _METERS,

            /// <summary>
            /// <para>Decimeters</para>
            /// <para>Decimeters—The linear unit is decimeters.</para>
            /// <para>分米 - 线性单位为分米。</para>
            /// </summary>
            [Description("Decimeters")]
            [GPEnumValue("DECIMETERS")]
            _DECIMETERS,

            /// <summary>
            /// <para>Centimeters</para>
            /// <para>Centimeters—The linear unit is centimeters.</para>
            /// <para>厘米—线性单位为厘米。</para>
            /// </summary>
            [Description("Centimeters")]
            [GPEnumValue("CENTIMETERS")]
            _CENTIMETERS,

            /// <summary>
            /// <para>Millimeters</para>
            /// <para>Millimeters—The linear unit is millimeters.</para>
            /// <para>毫米 - 线性单位为毫米。</para>
            /// </summary>
            [Description("Millimeters")]
            [GPEnumValue("MILLIMETERS")]
            _MILLIMETERS,

            /// <summary>
            /// <para>Nautical miles</para>
            /// <para>Nautical miles—The linear unit is nautical miles.</para>
            /// <para>海里 - 线性单位为海里。</para>
            /// </summary>
            [Description("Nautical miles")]
            [GPEnumValue("NAUTICAL_MILES")]
            _NAUTICAL_MILES,

            /// <summary>
            /// <para>Miles</para>
            /// <para>Miles—The linear unit is miles.</para>
            /// <para>英里—线性单位为英里。</para>
            /// </summary>
            [Description("Miles")]
            [GPEnumValue("MILES")]
            _MILES,

            /// <summary>
            /// <para>Yards</para>
            /// <para>Yards—The linear unit is yards.</para>
            /// <para>码 - 线性单位为码。</para>
            /// </summary>
            [Description("Yards")]
            [GPEnumValue("YARDS")]
            _YARDS,

            /// <summary>
            /// <para>Feet</para>
            /// <para>Feet—The linear unit is feet.</para>
            /// <para>英尺 - 线性单位为英尺。</para>
            /// </summary>
            [Description("Feet")]
            [GPEnumValue("FEET")]
            _FEET,

            /// <summary>
            /// <para>Inches</para>
            /// <para>Inches—The linear unit is inches.</para>
            /// <para>英寸—线性单位为英寸。</para>
            /// </summary>
            [Description("Inches")]
            [GPEnumValue("INCHES")]
            _INCHES,

            /// <summary>
            /// <para>Decimal degrees</para>
            /// <para>Decimal degrees—The linear unit is decimal degrees.</para>
            /// <para>十进制度 - 线性单位为十进制度。</para>
            /// </summary>
            [Description("Decimal degrees")]
            [GPEnumValue("DECIMAL_DEGREES")]
            _DECIMAL_DEGREES,

            /// <summary>
            /// <para>Points</para>
            /// <para>Points—The linear unit is points.</para>
            /// <para>点数 （Points） - 线性单位为点。</para>
            /// </summary>
            [Description("Points")]
            [GPEnumValue("POINTS")]
            _POINTS,

            /// <summary>
            /// <para>Unknown</para>
            /// <para>Unknown—The linear unit is unknown.</para>
            /// <para>未知 - 线性单位未知。</para>
            /// </summary>
            [Description("Unknown")]
            [GPEnumValue("UNKNOWN")]
            _UNKNOWN,

        }

        public AnalyzeLASRunwayObstacles SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}